import useRouter from 'koa-router';
import { sendCode } from '../utils/sendCode.js'
import { sign, verify } from '../utils/jwt.js'
import { userLogin, userRegister, userFind } from '../controllers/UserService.js'
import { getCode } from '../data/code.js'

const router = useRouter()



// 发送验证码
router.post('/user/sendCode', async (ctx) => {
    // 获取到前端传递的手机号, 调用发验证码的方法
    // koa有个问题 不能解析post传来的参数，需要安装koa-bodyparser
    const { phoneNumber } = ctx.request.body;
    // console.log(phoneNumber);
    // ctx.body = '后端给你发验证码了'
    try {
        let status = await sendCode(phoneNumber, ctx)
        // console.log(status);
        if (status) {
            ctx.body = {
                code: '8000',
                msg: '发送验证码成功',
            }

        } else {
            ctx.body = {
                code: '8005',
                msg: '发送验证码失败',
            }
        }

    } catch (err) {
        console.log(err);
    }
})

// 验证验证码是否正确
router.post('/user/verifyCode', async (ctx) => {
    // 获取到前端传递的手机号, 验证验证码是否正确
    const { phoneNumber, code } = ctx.request.body;
    if (getCode(phoneNumber) === undefined) {
        ctx.body = {
            code: '8005',
            msg: '验证码发送失败'
        }
        return;
    }
    let rightCode = getCode(phoneNumber).code
    if (rightCode === code) {
        ctx.body = {
            code: '8000',
            msg: '验证码正确',
        }
    } else {
        ctx.body = {
            code: '8003',
            msg: '验证码错误',
        }
    }

})

// 手机注册成功或验证码登录，手机号存在，进入首页
router.post('/page', async (ctx) => {

    // console.log(ctx.request.body.type);
    let type = ctx.request.body.type
    let phone = ctx.request.body.phone;
    let code = ctx.request.body.code;

    // 注意code是一个对象 code._value是验证码

    // console.log(type, phone, code._value);

    // console.log(getCode(phone), '//////////////////'); // 空的
    // console.log(getCode(phone).code, '11111111111111'); // 验证码

    if (type !== null && phone !== null && code !== null) {
        // 检查手机号码格式是否正确，这里可以添加正则表达式验证
        // 假设是中国大陆手机号码的格式
        const phoneRegex = /^(?:(?:\+|00)86)?1[3-9]\d{9}$/;
        if (!phoneRegex.test(phone)) {
            ctx.body = {
                code: '8002',
                msg: '手机号码格式不正确',
            }
            return;
        }
        // 注意：存验证码的时候是一个对象，还包括它的创建时间
        if (code._value !== getCode(phone).code) {
            ctx.body = {
                code: '8003',
                msg: '验证码错误',
            }
            return;
        }
        if ((type === 1 || type === 2) && (code._value === getCode(phone).code)) {

            // 登录/注册成功，将注册信息存入数据库
            let user = await userFind(phone); // user是一个数组
            // console.log(user, '////////////////////////');
            if (!user.length) {
                // 信息不存在，则注册
                await userRegister(phone, type)
            }
            // 更新user
            user = await userFind(phone);
            // console.log(user, '............................');
            // 生成token
            let token = sign({
                id: user[0].id,
                type,
                phone
            })
            console.log(token);
            ctx.body = {
                code: '8000',
                msg: '登录成功',
                data: {
                    id: user[0].id,
                    type: user[0].type,
                    phone: user[0].phone
                },
                token,
            }

            return;
        }
    } else {
        ctx.body = {
            code: '8001',
            msg: '参数存在空值',
        }
    }
})

// 密码登录成功，进入首页
router.post('/user/login', async (ctx) => {
    // console.log(ctx.request.body);
    let phone = ctx.request.body.phoneNumber;
    let password = ctx.request.body.password;
    // 判断手机号是否存在，如果存在，则进入首页
    let user = await userLogin(phone, password);
    // user查询出来结果为数组
    if (!user.length) {
        ctx.body = {
            code: '8004',
            msg: '用户名或密码错误',
        }
    } else {
        // 生成token
        let token = sign({
            id: user[0].id,
            type: user[0].type,
            phone
        })
        ctx.body = {
            code: '8000',
            msg: '登录成功',
            data: {
                id: user[0].id,
                type: user[0].type,
                phone
            },
            token
        }
    }
})




export default router;